package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author fangjx
 * @date 2021/2/9
 * 需求:抽取公共controller
 * 本身D工程的localhost:8080/test/A是可以接收请求的,然后我们可以把公共的controller抽取到一个工程中给其他工程引用
 * 例如这里把A工程当作公共工程,里面有一个TestController,然后D工程引用A工程
 * 所以该项目启动的时候就不止能localhost:8080/test/A接收请求,还能localhost:8080/other/other接收请求
 *
 * 以下注意点看看
 * 需要注意:因为我们是以D工程的springboot启动类来启动,A工程只是一个jar包,所以默认会扫描D工程主启动类下的包
 * 所以A工程的包结构也必须是在D工程主启动类下,不然会扫描不到,然后访问localhost:8080/other/other就会出现404
 * 如果不想按照D工程主启动类的包结构,可以在D工程的配置类上加上@ComponentScan加上包路径即可
 *
 * 注意@ComponentScan: @SpringBootApplication主启动标志内包含了@ComponentScan所以如果你在主启动类上写@ComponentScan注解的话是会覆盖默认的扫描主启动包下的类的
 * 当然直接写com.*的话那无所谓,所以假如A工程的包结构跟D工程的主启动包结构不一样,最好是写一个配置类然后再配置类上加@ComponentScan,这样就不会覆盖原本的同时还会扫描指定包的
 * 这样就是叠加而不是覆盖了,所以这也解释了为什么网上很多人做自定义配置不会在主启动类上加而是新建一个配置类然后在这个配置类上做的原因
 *
 *
 */
@RestController
@RequestMapping("test")
public class DemoController {

    @Value("${a}")
    private String a;

    @Value("${c}")
    private String c;

    @Value("${d}")
    private String d;

//    @Value("${h}")
//    private String h;  //虽然这个h是在本项目下的h.properties中,但是@PropertySource没写它所以没引入,因为默认都只加载本项目的核心配置文件

    @RequestMapping("A")
    public void test(){
        System.out.println(a);
        System.out.println(c);
        System.out.println(d);
    }

}
